#include<bits/stdc++.h> 
using namespace std;
//  人们说话都有自己的习惯，我们可以通过其对同义词的不同用法来判断一个人是否是本人。现在
//	给定一个人的一段演讲，需要判断出其最常用的单词
//1.每个输入包括一个测试用例，每个测试用例有一行不大于1048576个字符的字符串，以\n结尾。输
//	入必定包含一个[0-9 a-z A-Z]的字符
//2.对于每个测试用例，输出一个最常用的单词，以及它出现的次数。如果不止一个单词则输出字典
//	序最小的那个。单词需要按照小写字母输出。这里的单词指的是被非字母数字字符分割的连续的
//	字母数字序列
//3.字符串遍历，统计
//这题就是简单地统计字符串中的单词，然后找出次数最多的。有意思的点就是它重新定义了单词这个意思 
unordered_map<string, int> wordCount;
int main(){
	string s;
	getline(cin, s);
	unsigned int start=0, end=0;
	string tmp="";
	while(end!=s.length()){
		if(!(('0'<=s[end]&&s[end]<='9')||('a'<=s[end]&&s[end]<='z')||('A'<=s[end]&&s[end]<='Z'))){
			tmp = s.substr(start, end-start);
			if(tmp==""){
				end++;
				start=end;
			}
			else{
				for(unsigned int i =0;i<tmp.length();i++){
					tmp[i] = tolower(tmp[i]);
				}
				if(wordCount.find(tmp)!=wordCount.end()){
					wordCount[tmp] += 1;
				}
				else{
					wordCount[tmp] = 1;
				}
				end++;
				start=end;
			}
		}
		else{
			end++;
		}
	}
	if(start!=end){
		tmp = s.substr(start, end-start);
		for(unsigned int i =0;i<tmp.length();i++){
			tmp[i] = tolower(tmp[i]);
		}
		if(wordCount.find(tmp)!=wordCount.end()){
			wordCount[tmp] += 1;
		}
		else{
			wordCount[tmp] = 1;
		}
	}
	string max_ = "";
	unordered_map<string, int>::iterator it;
	for(it=wordCount.begin();it!=wordCount.end();it++){
		if(max_=="") max_ = it->first;
		else{
			if(wordCount[it->first]>wordCount[max_]) max_ = it->first;
			else if(wordCount[it->first] == wordCount[max_] && it->first<max_) max_ = it->first;
		}
	}
	cout<<max_<<" "<<wordCount[max_]<<endl;
	return 0;
} 